package qdu.rg012.test_messenger;

import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.os.Messenger;
import android.util.Log;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

/**
 * Messenger 将绑定模式和消息机制结合起来，从而达到跨进程的service
 * --------------------服务端---------------------
 * 1) 创建内部类handler子类, 重写handlemessage处理客户端发来的数据
 * 2) 创建messenger对象，该对象的创建需要准备好handler对象作为实参
 * 3） 调用messenger对象getbinder函数返回一个binder到客户端用于service绑定
 * --------------------客户端------------------------
 * 1） 在连接类的onServiceConnected函数中，把获取到的binder对象包装到messenger对象中
 *     该messenger对象就相当于服务端的对象
 * 2） 客户端准备消息对象，通过messenger的send函数向该对象包含的handler发送消息
 *
 */
public class Srv1 extends Service {
//    class Mybinder extends Binder {
//        public void getsrv(){
//            Log.i("mytag", "service from Srv1");
//        }
//    }
    //Mybinder mb;
    class MyHandler extends Handler{
        @Override
        public void handleMessage(@NonNull Message msg) {
            super.handleMessage(msg);
            switch(msg.what){
                case 13:
                    Bundle bd = msg.getData();
                    Log.i("mytag","msg from client:" + bd.getString("cltmsg"));
                    break;
            }
        }
    }
    Messenger msgr_srv;
    @Override
    public void onCreate() {
        super.onCreate();
        //mb = new Mybinder();

        msgr_srv = new Messenger(new MyHandler());
    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        //return mb;
        return msgr_srv.getBinder();
    }

    @Override
    public boolean onUnbind(Intent intent) {

        return super.onUnbind(intent);
    }
}
